package com.back.common;

// 导入自定义的错误码枚举类，用于定义错误类型
import com.back.exception.ErrorCode;

/**
 * 创建统一返回结果的工具类
 * 提供各种静态方法，快速生成成功或失败的响应对象
 */
public class ResultUtils {

    /**
     * 生成"成功"的响应
     *
     * @param data 要返回的业务数据（如英雄ID、角色列表等）
     * @param <T>  数据的类型（泛型，支持任意类型）
     * @return 封装好的成功响应对象（BaseResponse）
     */
    public static <T> BaseResponse<T> success(T data) {
        // 调用BaseResponse的构造方法，创建成功响应：
        // 状态码为0（约定表示成功），数据为传入的data，消息为"ok"
        return new BaseResponse<>(0, data, "ok");
    }

    /**
     * 生成"失败"的响应（根据错误码枚举）
     *
     * @param errorCode 错误码枚举对象（包含错误码和错误消息）
     * @return 封装好的失败响应对象
     */
    public static BaseResponse<?> error(ErrorCode errorCode) {
        // 直接使用错误码枚举创建响应，数据为null
        return new BaseResponse<>(errorCode);
    }

    /**
     * 生成"失败"的响应（自定义错误码和消息）
     *
     * @param code    自定义错误码
     * @param message 自定义错误消息
     * @return 封装好的失败响应对象
     */
    public static BaseResponse<?> error(int code, String message) {
        // 用自定义的错误码和消息创建响应，数据为null
        return new BaseResponse<>(code, null, message);
    }

    /**
     * 生成"失败"的响应（基于错误码枚举，但自定义消息）
     *
     * @param errorCode 错误码枚举对象（提供错误码）
     * @param message   自定义的错误消息（覆盖枚举中的默认消息）
     * @return 封装好的失败响应对象
     */
    public static BaseResponse<?> error(ErrorCode errorCode, String message) {
        // 使用错误码枚举的状态码，但替换为自定义消息，数据为null
        return new BaseResponse<>(errorCode.getCode(), null, message);
    }
}